<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ES6</title>
</head>
<body>

<script>
 // var let const 的区别
// (1) var 声明的变量会挂载在window上,而let 和 const声明的变量不会
//     var a = 10;
//     console.log(a,window.a);
//     const b = 2;
//     console.log(b,window.b);
//     let c = 8;
//     console.log(c,window.c)


 // var 声明的变量会变量提升，let const 不存在变量提升
 // console.log(a); // undefined  ===>  a已声明还没赋值，默认得到undefined值
 // var a = 100;
 // console.log(b); // 报错：b is not defined  ===> 找不到b这个变量
 // let b = 10;
 // console.log(c); // 报错：c is not defined  ===> 找不到c这个变量
 // const c = 10;



    // let const 形成块级作用域
 // if(1){
 //     var a = 100;
 //     let b = 10;
 // }
 // console.log(a); // 100
 // console.log(b)  // 报错：b is not defined  ===> 找不到b这个变量

 // if(1){
 //     var a = 100;
 //     const c = 1;
 // }
 // console.log(a); // 100
 // console.log(c)  // 报错：c is not defined  ===> 找不到c这个变量


    //(4).同一作用域下let和const不能声明同名变量，而var可以
//  var a = 100;
//  console.log(a); // 100
//
//  var a = 10;
//  console.log(a); // 10
// let a = 100;
//  let a = 10;
 //  控制台报错：Identifier 'a' has already been declared  ===> 标识符a已经被声明了

 //暂存死区
 // var a = 100;
 // if(1){
 //     a = 10;
 //     //在当前块作用域中存在a使用let/const声明的情况下，给a赋值10时，只会在当前作用域找变量a，
 //     // 而这时，还未到声明时候，所以控制台Error:a is not defined
 //     let a = 1;
 // }


 //1、一旦声明必须赋值,不能使用null占位。
 /*
 * &emsp;&emsp;2、声明后不能再修改
 * &emsp;&emsp;3、如果声明的是复合类型数据，可以修改其属性
 * */
 // const a = 100;
 // const list = [];
 // // list[0] = 10;
 // console.log(list);// [10]
 // //声明为复合类型数据
 // const obj = {a:100};
 // obj.name = 'apple';
 // obj.a = 10000;
 // console.log(obj);// {a:10000,name:'apple'}


    // 箭头函数
    // es5创建函数
    // var aa = function () {};
    //es6 箭头函数
    // var aa = () =>{};

    //es5函数
    // var fn = function (a) {
    //     return a +5;
    // };
    //es6 箭头函数
    // var fn=(a)=> a+6;
    // console.log(fn(34))
 // 简写规则：
 // 当函数所传参数只有一个时，可以去掉();        eg: (a) => {}   简写为：a => {}
 // 当函数体中只返回值，而没有其他操作时，可以去掉{}；eg: (a, b) => {return a+b} 简写为：(a, b) => a+b

    // map
    // let arr = [50,45,80];
    // let result = arr.map(item=>{
    //     if(item >=60){
    //         return '及格'
    //     }else {
    //        return '不及格'
    //     }
    // });
    // console.log(result);


 // let arr = [12,69,180,8763];
 // let result = arr.reduce((tmp, item, index) => {
 //     console.log( item);
 //     return tmp + item;
 // });
 // console.log(result);//求和


 // let arr=[
 //     {title: '电源线', price: 50},
 //     {title: '电脑', price: 13000},
 //     {title: '键盘', price: 120},
 //     {title: '手机', price: 9000}
 // ];
 // let result=arr.filter(json=>json.price>=5000);
 // console.log(result);//[{title: '电脑', price: 13000},{title: '手机', price: 9000}]

 //
 // let arr=[12,5,8,9];
 // arr.forEach((item,index)=>{
 //     console.log(index+': '+item); //0: 12  1: 5  2: 8  3: 9
 // });

    //结构赋值
    // let [a,b,c] = [2,3,8];
    //  console.log(a,c,b)


    new Promise((resolve, reject) => {
          resolve();
    }).then((res)=>{
      console.log(res)
    }).catch((error)=>{
         console.log(error)
    })
</script>
</body>
</html>